from flask import current_app
from flask import g
from flask import session
import functools



def do_index_class(index):
    '''根据传入的index值返回对应的class属性'''
    if index == 1:
        return 'first'
    elif index == 2:
        return 'second'
    elif index == 3:
        return 'third'
    else:
        return ''

#   装饰器的功能，就是对之前的功能添加　
#  　g只要是同一个请求，g对象就不会被清空
# 　　只要调用该装饰器就能获取用户对象数据
def login_user_data(veiw_func):

    @functools.wraps(veiw_func)
    def wrapper(*args, **kwargs):
        # １．获取user_id　'user_id'的值　
        user_id = session.get('user_id')
        # ２．根据user)id查询用户对象
        #    延迟导入，解决循环导入问题
        user = None # type: User
        from info.models import User
        try:
            if user_id:
                user = User.query.get(user_id)
        except Exception as e:
            current_app.logger.error(e)
        # 3.保存用户对象给被装饰的视图函数使用
        g.user = user
        # veiw_func是一个函数，相当于index（）这个函数，因此在这里被调用
        return veiw_func(*args, **kwargs)
    return wrapper








# 装饰器的影响：当多个函数使用同一个装饰器的时候，会导致被修改函数的名字
# 解决方法：
#       import functools
#     ＠functools．wraps(view_func)
#      view_func--->视图函数
# @login_user_data
# def index():
#     # 这里的意思是：这里使用了装饰器，那么就可以使用g对象
#     # 原理是这个index传递到装饰器中，被调用了
#     g.user
#     print('index')



